수동 메모리 관리는 new 그리고 delete 는 취약한 "책임 계약". 프로그래머는 조기 반환과 예외를 포함하여 모든 실행 경로를 완벽하게 예측해야 자원이 해제됨을 보장할 수 있습니다. 이 접근 방식은 체계적 실패에 취약합니다.
체계적 결함
- 누수 유인구: 복잡한 논리(조건문, 스위치)에서 매번
new와 짝지어주지 않으면delete시스템 성능이 시간이 지남에 따라 저하됩니다. - 포인터 무효화: 예를 들어 dangling 포인터 (삭제 후 메모리 접근) 또는 중복 해제 정의되지 않은 동작과 보안 취약점을 유발합니다.
- 예외 안전성: 할당과 해제 사이에 예외가 발생하면,
delete는 완전히 건너뜁니다.
그리고 진화
C++11/14은 <memory> 헤더를 '난쟁이 포인터'에서 벗어나 컴파일러 레벨에서 안전성을 강제하는 자동 소유 모델로 전환했습니다.
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>